home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / ldapjdk.jar / netscape / ldap / util / LDIF.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-13  |  7.3 KB  |  360 lines

  1. package netscape.ldap.util;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.DataInputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import java.io.PrintWriter;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12. import java.util.Enumeration;
  13. import java.util.Hashtable;
  14. import java.util.StringTokenizer;
  15. import java.util.Vector;
  16. import netscape.ldap.LDAPAttribute;
  17. import netscape.ldap.LDAPModification;
  18.  
  19. public class LDIF {
  20.    private static final char COMMENT = '#';
  21.    private int m_version = 1;
  22.    private boolean m_done = false;
  23.    private LineReader m_reader;
  24.    private String m_source;
  25.    private MimeBase64Decoder m_decoder;
  26.    private boolean m_currEntryDone = false;
  27.  
  28.    public LDIF() throws IOException {
  29.       DataInputStream var1 = new DataInputStream(System.in);
  30.       BufferedReader var2 = new BufferedReader(new InputStreamReader(var1, "UTF8"));
  31.       this.m_reader = new LineReader(this, var2);
  32.       this.m_source = "System.in";
  33.       this.m_decoder = new MimeBase64Decoder();
  34.    }
  35.  
  36.    public LDIF(String var1) throws IOException {
  37.       FileInputStream var2 = new FileInputStream(var1);
  38.       DataInputStream var3 = new DataInputStream(var2);
  39.       BufferedReader var4 = new BufferedReader(new InputStreamReader(var3, "UTF8"));
  40.       this.m_reader = new LineReader(this, var4);
  41.       this.m_source = var1;
  42.       this.m_decoder = new MimeBase64Decoder();
  43.    }
  44.  
  45.    public LDIF(DataInputStream var1) throws IOException {
  46.       BufferedReader var2 = new BufferedReader(new InputStreamReader(var1, "UTF8"));
  47.       this.m_reader = new LineReader(this, var2);
  48.       this.m_source = var1.toString();
  49.    }
  50.  
  51.    public LDIFRecord nextRecord() throws IOException {
  52.       return this.m_done ? null : this.parse_ldif_record(this.m_reader);
  53.    }
  54.  
  55.    private LDIFRecord parse_ldif_record(LineReader var1) throws IOException {
  56.       Object var2 = null;
  57.       Object var3 = null;
  58.       new Vector();
  59.       Object var4 = null;
  60.       String var6 = var1.readLine();
  61.       if (var6 == null) {
  62.          return null;
  63.       } else if (!var6.startsWith("dn:")) {
  64.          throw new IOException("no dn found in <" + var6 + ">");
  65.       } else {
  66.          String var7 = var6.substring(3).trim();
  67.          if (var7.startsWith(":") && var7.length() > 1) {
  68.             String var5 = var7.substring(1).trim();
  69.             var7 = new String(this.getDecodedBytes(var5), "UTF8");
  70.          }
  71.  
  72.          LDIFContent var9 = this.parse_ldif_content(var1);
  73.          LDIFRecord var8 = new LDIFRecord(var7, var9);
  74.          return var8;
  75.       }
  76.    }
  77.  
  78.    private LDIFContent parse_ldif_content(LineReader var1) throws IOException {
  79.       String var2 = var1.readLine();
  80.       if (var2 != null && var2.length() >= 1 && !var2.equals("-")) {
  81.          if (var2.startsWith("changetype:")) {
  82.             String var13 = var2.substring(11).trim();
  83.             if (var13.equals("modify")) {
  84.                LDIFModifyContent var17 = this.parse_mod_spec(var1);
  85.                return var17;
  86.             } else if (var13.equals("add")) {
  87.                LDIFAddContent var16 = this.parse_add_spec(var1);
  88.                return var16;
  89.             } else if (var13.equals("delete")) {
  90.                LDIFDeleteContent var15 = this.parse_delete_spec(var1);
  91.                return var15;
  92.             } else if (!var13.equals("moddn") && !var13.equals("modrdn")) {
  93.                throw new IOException("change type not supported");
  94.             } else {
  95.                LDIFModDNContent var14 = this.parse_moddn_spec(var1);
  96.                return var14;
  97.             }
  98.          } else {
  99.             Hashtable var3 = new Hashtable();
  100.             Object var6 = null;
  101.  
  102.             while(true) {
  103.                int var7 = var2.length();
  104.                if (var7 >= 1) {
  105.                   int var8 = var2.indexOf(58);
  106.                   if (var8 == -1) {
  107.                      throw new IOException("no ':' found in <" + var2 + ">");
  108.                   }
  109.  
  110.                   String var4 = var2.substring(0, var8).toLowerCase();
  111.                   Object var5 = "";
  112.                   ++var8;
  113.                   if (var7 > var8) {
  114.                      if (var2.charAt(var8) == ':') {
  115.                         ++var8;
  116.                         String var9 = var2.substring(var8).trim();
  117.                         var5 = this.getDecodedBytes(var9);
  118.                      } else if (var2.charAt(var8) == '<') {
  119.                         try {
  120.                            URL var23 = new URL(var2.substring(var8 + 1).trim());
  121.                            String var10 = var23.getFile();
  122.                            var5 = this.getFileContent(var10);
  123.                         } catch (MalformedURLException var11) {
  124.                            throw new IOException("Exception: cannot construct url " + var2.substring(var8 + 1).trim());
  125.                         }
  126.                      } else {
  127.                         var5 = var2.substring(var8).trim();
  128.                      }
  129.                   }
  130.  
  131.                   LDAPAttribute var18 = (LDAPAttribute)var3.get(var4);
  132.                   if (var18 == null) {
  133.                      var18 = new LDAPAttribute(var4);
  134.                   }
  135.  
  136.                   if (var5 instanceof String) {
  137.                      var18.addValue((String)var5);
  138.                   } else {
  139.                      var18.addValue((byte[])var5);
  140.                   }
  141.  
  142.                   var3.put(var4, var18);
  143.                   var2 = var1.readLine();
  144.                   if (var2 != null && var2.length() >= 1 && !var2.equals("-")) {
  145.                      continue;
  146.                   }
  147.  
  148.                   if (var2 != null && var2.length() < 1) {
  149.                      this.m_currEntryDone = true;
  150.                   }
  151.                }
  152.  
  153.                Enumeration var19 = var3.elements();
  154.                LDIFAttributeContent var22 = new LDIFAttributeContent();
  155.  
  156.                while(var19.hasMoreElements()) {
  157.                   var22.addElement((LDAPAttribute)var19.nextElement());
  158.                }
  159.  
  160.                var3.clear();
  161.                Object var12 = null;
  162.                return var22;
  163.             }
  164.          }
  165.       } else {
  166.          if (var2 != null && var2.length() < 1) {
  167.             this.m_currEntryDone = true;
  168.          }
  169.  
  170.          return null;
  171.       }
  172.    }
  173.  
  174.    private byte[] getDecodedBytes(String var1) {
  175.       ByteBuf var2 = new ByteBuf(var1);
  176.       ByteBuf var3 = new ByteBuf();
  177.       this.m_decoder.translate(var2, var3);
  178.       return var3.toBytes();
  179.    }
  180.  
  181.    private byte[] getFileContent(String var1) throws IOException {
  182.       StringTokenizer var2 = new StringTokenizer(var1, "|");
  183.       String var3 = var1;
  184.       int var4 = var2.countTokens();
  185.       if (var4 == 2) {
  186.          String var5 = (String)var2.nextElement();
  187.          int var6 = var5.lastIndexOf("/");
  188.          String var7 = var5.substring(var6 + 1);
  189.          var5 = (String)var2.nextElement();
  190.          var5 = var5.replace('/', '\\');
  191.          var3 = var7 + ":" + var5;
  192.       }
  193.  
  194.       File var10 = new File(var3);
  195.       byte[] var11 = new byte[(int)var10.length()];
  196.       FileInputStream var12 = new FileInputStream(var3);
  197.       var12.read(var11);
  198.       return var11;
  199.    }
  200.  
  201.    private LDIFAddContent parse_add_spec(LineReader var1) throws IOException {
  202.       LDIFAttributeContent var2 = (LDIFAttributeContent)this.parse_ldif_content(var1);
  203.       if (this.m_currEntryDone) {
  204.          this.m_currEntryDone = false;
  205.       }
  206.  
  207.       LDAPAttribute[] var3 = var2.getAttributes();
  208.       LDIFAddContent var4 = new LDIFAddContent(var3);
  209.       return var4;
  210.    }
  211.  
  212.    private LDIFDeleteContent parse_delete_spec(LineReader var1) throws IOException {
  213.       String var2 = var1.readLine();
  214.       if (var2 != null && !var2.equals("")) {
  215.          throw new IOException("invalid SEP");
  216.       } else {
  217.          LDIFDeleteContent var3 = new LDIFDeleteContent();
  218.          return var3;
  219.       }
  220.    }
  221.  
  222.    private LDIFModifyContent parse_mod_spec(LineReader var1) throws IOException {
  223.       Object var2 = null;
  224.       String var10 = var1.readLine();
  225.       LDIFModifyContent var3 = new LDIFModifyContent();
  226.  
  227.       do {
  228.          byte var4 = -1;
  229.          if (var10.startsWith("add:")) {
  230.             var4 = 0;
  231.          } else if (var10.startsWith("delete:")) {
  232.             var4 = 1;
  233.          } else {
  234.             if (!var10.startsWith("replace:")) {
  235.                throw new IOException("unknown modify type");
  236.             }
  237.  
  238.             var4 = 2;
  239.          }
  240.  
  241.          LDIFAttributeContent var5 = (LDIFAttributeContent)this.parse_ldif_content(var1);
  242.          if (var5 != null) {
  243.             LDAPAttribute[] var12 = var5.getAttributes();
  244.  
  245.             for(int var13 = 0; var13 < var12.length; ++var13) {
  246.                LDAPModification var14 = new LDAPModification(var4, var12[var13]);
  247.                var3.addElement(var14);
  248.             }
  249.          } else {
  250.             int var6 = var10.indexOf(":");
  251.             if (var6 == -1) {
  252.                throw new IOException("colon missing in " + var10);
  253.             }
  254.  
  255.             String var7 = var10.substring(var6 + 1).trim();
  256.             if (var4 == 0) {
  257.                throw new IOException("add operation needs the value for attribute " + var7);
  258.             }
  259.  
  260.             LDAPAttribute var8 = new LDAPAttribute(var7);
  261.             LDAPModification var9 = new LDAPModification(var4, var8);
  262.             var3.addElement(var9);
  263.          }
  264.  
  265.          if (this.m_currEntryDone) {
  266.             this.m_currEntryDone = false;
  267.             break;
  268.          }
  269.  
  270.          var10 = var1.readLine();
  271.       } while(var10 != null && !var10.equals(""));
  272.  
  273.       return var3;
  274.    }
  275.  
  276.    private LDIFModDNContent parse_moddn_spec(LineReader var1) throws IOException {
  277.       Object var2 = null;
  278.       String var5 = var1.readLine();
  279.       LDIFModDNContent var3 = new LDIFModDNContent();
  280.  
  281.       do {
  282.          if (var5.startsWith("newrdn:") && var5.length() > "newrdn:".length() + 1) {
  283.             var3.setRDN(var5.substring("newrdn:".length()).trim());
  284.          } else if (var5.startsWith("deleteoldrdn:") && var5.length() > "deleteoldrdn:".length() + 1) {
  285.             String var4 = var5.substring("deleteoldrdn:".length()).trim();
  286.             if (var4.equals("0")) {
  287.                var3.setDeleteOldRDN(false);
  288.             } else {
  289.                if (!var4.equals("1")) {
  290.                   throw new IOException("Incorrect input for deleteOldRdn ");
  291.                }
  292.  
  293.                var3.setDeleteOldRDN(true);
  294.             }
  295.          } else if (var5.startsWith("newsuperior:") && var5.length() > "newsuperior:".length() + 1) {
  296.             var3.setNewParent(var5.substring("newsuperior:".length()).trim());
  297.          }
  298.  
  299.          var5 = var1.readLine();
  300.       } while(var5 != null && !var5.equals(""));
  301.  
  302.       return var3;
  303.    }
  304.  
  305.    public static boolean isPrintable(byte[] var0) {
  306.       for(int var1 = var0.length - 1; var1 >= 0; --var1) {
  307.          if ((var0[var1] < 32 || var0[var1] > 127) && var0[var1] != 9) {
  308.             return false;
  309.          }
  310.       }
  311.  
  312.       return true;
  313.    }
  314.  
  315.    public static void breakString(PrintWriter var0, String var1, int var2) {
  316.       int var3 = var1.length();
  317.       int var4 = 0;
  318.       int var5 = var2;
  319.  
  320.       while(var3 > 0) {
  321.          int var6 = Math.min(var5, var3);
  322.          String var7 = var1.substring(var4, var4 + var6);
  323.          if (var4 != 0) {
  324.             var0.print(" " + var7);
  325.          } else {
  326.             var0.print(var7);
  327.             --var5;
  328.          }
  329.  
  330.          var4 += var6;
  331.          var3 -= var6;
  332.          var0.print('\n');
  333.       }
  334.  
  335.    }
  336.  
  337.    public int getVersion() {
  338.       return this.m_version;
  339.    }
  340.  
  341.    public String toString() {
  342.       return "LDIF {" + this.m_source + "}";
  343.    }
  344.  
  345.    // $FF: synthetic method
  346.    static char access$0() {
  347.       return '#';
  348.    }
  349.  
  350.    // $FF: synthetic method
  351.    static boolean access$1(LDIF var0) {
  352.       return var0.m_done;
  353.    }
  354.  
  355.    // $FF: synthetic method
  356.    static void access$2(LDIF var0, boolean var1) {
  357.       var0.m_done = var1;
  358.    }
  359. }
  360.